package com.project.study.farming.base.controller;

import com.project.study.farming.base.entity.dto.*;
import com.project.study.farming.base.entity.po.MessagePo;
import com.project.study.farming.base.service.GuanLiMainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

/**
 * 管理员主要业务
 * @since 2020-05-01
 */
@Controller
@RequestMapping
public class GuanLiMainController {

    @Autowired
    private GuanLiMainService guanLiMainService;

    @RequestMapping("glMain")
    public ModelAndView glMain(){
        return this.guanLiMainService.glMain();
    }

    /**
     * 跳转农产品上传页面
     * @return 上传页面
     */
    @RequestMapping("uploadCropsPage")
    public ModelAndView uploadCropsPage() {
        return this.guanLiMainService.uploadCropsPage();
    }

    /**
     * 上传信息
     * @param dto 上传信息
     * @return 页面
     */
    @PostMapping("uploadCrops")
    public ModelAndView uploadCrops(UploadCropsDto dto) {
        return this.guanLiMainService.uploadCrops(dto);
    }

    /**
     * 查询申请页面
     * @param pageNum 当前页
     * @return 申请页面
     */
    @GetMapping("searchAudit")
    public ModelAndView searchAudit(@RequestParam(value = "pageNum", required = false) Integer pageNum,
                                    @RequestParam(value = "bigType", required = false) Integer bigType,
                                    @RequestParam(value = "cropId", required = false) Integer cropId,
                                    @RequestParam(value = "auditStatus", required = false) Integer auditStatus){
        return this.guanLiMainService.searchAudit(pageNum, bigType, cropId, auditStatus);
    }

    /**
     * 管理员审批操作
     * @param id 记录id
     * @param status 审批状态
     * @param pageNum 当前页
     * @return 审批页面
     */
    @GetMapping("auditResult")
    public ModelAndView auditResult(@RequestParam("id") String id, @RequestParam("status") Integer status, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.auditResult(id, status, pageNum);
    }

    /**
     * 管理员删除操作
     * @param id 记录id
     * @param pageNum 当前页
     * @return 审批页面
     */
    @GetMapping("deleteRes")
    public ModelAndView deleteRes(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.deleteRes(id, pageNum);
    }

    /**
     * 土地管理页面查询
     * @param pageNum 当前页
     * @return 审批页面
     */
    @GetMapping("areaPage")
    public ModelAndView areaPage(@RequestParam(value = "pageNum", required = false) Integer pageNum){
        return this.guanLiMainService.areaPage(pageNum);
    }

    /**
     * 土地管理删除
     * @param id 记录id
     * @param pageNum 当前页
     * @return 审批页面
     */
    @GetMapping("deleteArea")
    public ModelAndView deleteArea(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.deleteArea(id, pageNum);
    }

    /**
     * 土地管理编辑/新增页
     * @param id 记录id
     * @return 审批页面
     */
    @GetMapping("editArea")
    public ModelAndView editArea(@RequestParam(value = "id", required = false) String id){
        return this.guanLiMainService.editArea(id);
    }

    /**
     * 土地管理编辑/新增页
     * @return 审批页面
     */
    @GetMapping("saveArea")
    public ModelAndView saveArea(AreaPageDto dto){
        return this.guanLiMainService.saveArea(dto);
    }

    /**
     * 跳转饼状图页面
     * @return 饼状图页面
     */
    @GetMapping("getDrawPage")
    public ModelAndView getDrawPage(@RequestParam(value = "id") Integer id){
        return this.guanLiMainService.getDrawPage(id);
    }

    /**
     * 信息发布页面查询
     * @param pageNum 当前页
     * @return 信息发布页面
     */
    @GetMapping("messagePage")
    public ModelAndView messagePage(@RequestParam(value = "pageNum", required = false) Integer pageNum){
        return this.guanLiMainService.messagePage(pageNum);
    }

    /**
     * 信息发布删除
     * @param id 记录id
     * @param pageNum 当前页
     * @return 信息发布页面
     */
    @GetMapping("deleteMessage")
    public ModelAndView deleteMessage(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.deleteMessage(id, pageNum);
    }

    /**
     * 土地管理编辑/新增页
     * @param id 记录id
     * @return 审批页面
     */
    @GetMapping("editMessage")
    public ModelAndView editMessage(@RequestParam(value = "id", required = false) String id){
        return this.guanLiMainService.editMessage(id);
    }

    /**
     * 土地管理编辑/新增页
     * @return 审批页面
     */
    @GetMapping("saveMessage")
    public ModelAndView saveMessage(MessagePo messagePo){
        return this.guanLiMainService.saveMessage(messagePo);
    }

    /**
     * 植物种类页面查询
     * @param pageNum 当前页
     * @param type 大类
     * @return 植物种类页面
     */
    @GetMapping("cropTypePage")
    public ModelAndView cropTypePage(@RequestParam(value = "pageNum", required = false) Integer pageNum,
                                     @RequestParam(value = "type", required = false) Integer type){
        return this.guanLiMainService.cropTypePage(pageNum, type);
    }

    /**
     * 信息发布删除
     * @param id 记录id
     * @param pageNum 当前页
     * @param type 种类
     * @return 信息发布页面
     */
    @GetMapping("deleteTypePage")
    public ModelAndView deleteTypePage(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum,
                                       @RequestParam("type") Integer type){
        return this.guanLiMainService.deleteTypePage(id, pageNum, type);
    }

    /**
     * 植物种类编辑/新增页
     * @param id 记录id
     * @param type 种类
     * @return 植物种类
     */
    @GetMapping("editTypePage")
    public ModelAndView editTypePage(@RequestParam(value = "id", required = false) String id,
                                     @RequestParam(value = "type", required = false) Integer type){
        return this.guanLiMainService.editTypePage(id, type);
    }

    /**
     * 土地管理编辑/新增
     * @return 审批页面
     */
    @PostMapping("saveCropType")
    public ModelAndView saveCropType(CropsTypeDto cropsTypeDto){
        return this.guanLiMainService.saveCropType(cropsTypeDto);
    }

    /**
     * 用户管理页面查询
     * @param pageNum 当前页
     * @return 用户管理页面
     */
    @GetMapping("userPage")
    public ModelAndView userPage(@RequestParam(value = "pageNum", required = false) Integer pageNum){
        return this.guanLiMainService.userPage(pageNum);
    }

    /**
     * 用户管理删除
     * @param id 用户id
     * @param pageNum 当前页
     * @return 用户管理页面
     */
    @GetMapping("deleteUser")
    public ModelAndView deleteUser(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.deleteUser(id, pageNum);
    }

    /**
     * 用户管理新增页
     * @param id 记录id
     * @return 用户管理新增页
     */
    @GetMapping("addUser")
    public ModelAndView editUser(@RequestParam(value = "id", required = false) String id){
        return this.guanLiMainService.addUser(id);
    }

    /**
     * 用户管理编辑/新增页
     * @return 用户管理
     */
    @GetMapping("saveUser")
    public ModelAndView saveUser(UserDto userDto){
        return this.guanLiMainService.saveUser(userDto);
    }

    /**
     * 农药管理页面
     * @param pageNum 当前页
     * @return 农药管理页面
     */
    @GetMapping("medicinePage")
    public ModelAndView medicinePage(@RequestParam(value = "pageNum", required = false) Integer pageNum,
                                     @RequestParam(value = "medicineId", required = false) Integer medicineId,
                                     @RequestParam(value = "useStatus", required = false) Integer useStatus){
        return this.guanLiMainService.medicinePage(pageNum, medicineId, useStatus);
    }

    /**
     * 农药管理页面删除
     * @param id 当前id
     * @param pageNum 当前页
     * @return 农药管理页面
     */
    @GetMapping("deleteMedicine")
    public ModelAndView deleteMedicine(@RequestParam("id") String id, @RequestParam("pageNum") Integer pageNum){
        return this.guanLiMainService.deleteMedicine(id, pageNum);
    }

    /**
     * 跳转农药管理编辑页面
     * @param id 当前id
     * @return 农药管理编辑
     */
    @GetMapping("editMedicine")
    public ModelAndView editMedicine(@RequestParam(value = "id", required = false)Integer id){
        return this.guanLiMainService.editMedicine(id);
    }

    /**
     * 农药保存
     * @param dto 农药
     * @return 农药管理页面
     */
    @PostMapping("saveMedicine")
    public ModelAndView saveMedicine(MedicineDto dto){
        return this.guanLiMainService.saveMedicine(dto);
    }

    /**
     * 实时监控页面
     * @return 实时监控页面
     */
    @GetMapping("seePage")
    public ModelAndView seePage(@RequestParam(value = "pageNum", required = false) Integer pageNum,
                                @RequestParam(value = "areaId", required = false) Integer areaId,
                                @RequestParam(value = "cropId", required = false) Integer cropId,
                                @RequestParam(value = "plantStatus", required = false) Integer plantStatus){
        return this.guanLiMainService.seePage(pageNum, areaId, cropId, plantStatus);
    }
}
